package com.aiju.support.async;

import android.os.AsyncTask;

/**
 * @version: V1.0
 * @author: 佐为
 * @date: 2016-10-19 10:06
 * @Description: 抽象AsyncTask
 * if (Build.VERSION.SDK_INT > 11) 3.0以上设置并发，3.0以上默认一个线程执行完成下一个才去执行。设置THREAD_POOL_EXECUTOR 和3.0相同，5个线程并发执行
 *      this.mDownloadTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, new String[] { url });
 * else                            3.0以下默认5个线程执行
 *      this.mDownloadTask.execute(new String[] { url });
 */

public abstract class AbsAsyncTask<Params, Progress, Result> extends AsyncTask<Params, Progress, Result> {

    @Override
    protected Result doInBackground(Params[] Params) {
        try {
            return asyncExecute(Params);
        } catch (Throwable throwable) {
            doWhenException(throwable);
        } finally {
            doFinally();
        }
        return null;
    }

    /**
     * 异步方法
     * @param params
     * @return
     */
    protected abstract Result asyncExecute(Params[] params);

    /**
     * 异常方法
     * @param throwable
     */
    protected abstract void doWhenException(Throwable throwable);

    /**
     * 最终方法
     */
    protected abstract void doFinally();

}